package com.bw.coupon.service.impl;/**
 * @Author：尚志豪
 * @Package：com.bw.coupon.service.impl
 * @Project：doudi-group-practical_training-02
 * @name：ICouponServiceImpl
 * @Date：2025/1/12 20:36
 */

import com.bw.coupon.domain.*;
import com.bw.coupon.domain.req.TDiscountCouponReq;
import com.bw.coupon.domain.res.TDiscountCouponRes;
import com.bw.coupon.domain.vo.CouponAdd;
import com.bw.coupon.mapper.CouponMapper;
import com.bw.coupon.service.ICouponService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @program: doudi-group-practical_training-02
 * @description: 优惠劵 业务层
 * @author: CuiFu Bo
 * @create: 2025-01-12 20:36
 **/
@Service
public class CouponServiceImpl implements ICouponService {
    @Autowired
    private CouponMapper couponMapper;
    /**
     * B端 商家 发布优惠劵
     */
    @Transactional
    @Override
    public void add(CouponAdd couponAdd) {

        // 惠劵类型表
        TCouponType tCouponType = new TCouponType();

        // 优惠劵类型赋值
        // 判断
        if (couponAdd.getCouponId() == 1){
            tCouponType.setName("满减劵");
        }
        if (couponAdd.getCouponId() == 2){
            tCouponType.setName("折扣劵");
        }
        if (couponAdd.getCouponId() == 3){
            tCouponType.setName("随机劵");
        }
        tCouponType.setCouponId(couponAdd.getCouponId());
        tCouponType.setValue(couponAdd.getValue1());
        tCouponType.setValue2(couponAdd.getValue2());
        // 添加优惠劵类型表
        couponMapper.tCouponTypeAdd(tCouponType);
        System.out.println("添加优惠劵类型表返回的主键:"+tCouponType.getId());
        // 判断 指定
        if (couponAdd.getApplyProduct() == 2)
        {
            // sku_中间表_优惠券
            TSkuAttrDiscountCoupon tSkuAttrDiscountCoupon = new TSkuAttrDiscountCoupon();
            // skuId
            for (Integer skuId : couponAdd.getSkuIds()) {
                // skuId
                tSkuAttrDiscountCoupon.setSkuId(skuId);
                // 优惠券id
                tSkuAttrDiscountCoupon.setDiscountCouponId(tCouponType.getId());
                // 发布数量
                tSkuAttrDiscountCoupon.setAmount(couponAdd.getCouponQuantity());
                // 状态 state
                tSkuAttrDiscountCoupon.setState(0);
                // 添加中间表
                couponMapper.addTSkuAttrDiscountCoupon(tSkuAttrDiscountCoupon);
            }
        }
        // 商家发布优惠劵
        couponAdd.setCouponType(tCouponType.getId());
        // B端 商家 发布优惠劵
        couponMapper.add(couponAdd);
    }
    /**
     * B端 商家 多条件查询优惠卷分页列表
     */
    @Override
    public List<TDiscountCouponRes> merchantCouponList(TDiscountCouponReq tDiscountCouponReq) {
        return couponMapper.merchantCouponList(tDiscountCouponReq);
    }

    /**
     * B端 通过优惠劵id查询优惠劵信息
     */
    @Override
    public TDiscountCoupon accessCouponInformationByCouponId(Long id) {
        return couponMapper.accessCouponInformationByCouponId(id);
    }
    /**
     * B端 商家 通过优惠劵id失效
     */
    @Override
    public void couponExpired(Long id) {
        couponMapper.couponExpired(id);
    }
    /**
     * B端 商家 通过优惠劵id删除
     */
    @Override
    public void couponDeletion(Long id) {
        couponMapper.couponDeletion(id);
    }
    /**
     * B端 发布优惠劵页面 通过商铺id查询所有商品
     */
    @Override
    public List<TPmsSkuInfo> publishAllItemsInCoupon(Long id) {
        return couponMapper.publishAllItemsInCoupon(id);
    }

    /**
     * 保存支付流水记录到数据库
     * @param paymentFlow
     */
    @Override
    public void PaymentStatementAdd(PaymentFlow paymentFlow) {
        couponMapper.PaymentStatementAdd(paymentFlow);
    }

    /**
     * 查询订单号是否存在
     * @param outTradeNo
     * @return
     */
    @Override
    public PaymentFlow selectOutTradeNo(String outTradeNo) {
        PaymentFlow isOutTradeNo = couponMapper.selectOutTradeNo(outTradeNo);
        return isOutTradeNo;
    }
}
